home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / kowin / font / fonted31.lzh / fed3sub.c < prev    next >
C/C++ Source or Header  |  1990-11-13  |  4KB  |  189 lines

  1. /*/ ******************************************************************* /*/
  2. /*/                                    /*/
  3. /*/       FONTED3.win    version 1    小笠原博之 SPS0783 COR.    /*/
  4. /*/                                    /*/
  5. /*/ ******************************************************************* /*/
  6.  
  7. #include    <stdio.h>
  8. #include    <wlib.h>
  9. #include    <parts.h>
  10.  
  11. #include    "fed3const.h"
  12. #include    "fonted3.h"
  13. #include    "fed3mspat.h"
  14.  
  15. #define        mspatset()    MS_PATST( 1, Fed3mspat1 )
  16. #define        mspat(a)    MS_SEL(a)
  17.  
  18. #define        max(a,b)    ( (a)>(b) ? (a) : (b) )
  19. #define        min(a,b)    ( (a)<(b) ? (a) : (b) )
  20.  
  21. #define        BUGY        18
  22.  
  23. /*/
  24. /* ビットイメージデータをエディット画面に展開する。
  25. /*/
  26.  
  27. ImgtoEdit()
  28. {
  29.     int        i,
  30.             x,
  31.             y;
  32.     unsigned short    *ptr;
  33.     unsigned int    a;
  34.  
  35.     SheetClear( EditScreen, &EditClip, 1 );
  36.     for( ptr= ImgBuf, y= 0 ; y<BITSIZEY ; y+= DOTSIZEY ){
  37.         a= *ptr++;
  38.         for( x=0 ; x<BITSIZEX ; x+= DOTSIZEX, a<<=1 ){
  39.             if( !(a & 32768) ){
  40.                 SheetLine( EditScreen, &EditClip, x, y,
  41.                     x+(DOTSIZEX-2), y+(DOTSIZEY-2), 0, OptionFill );
  42.             }
  43.         }
  44.     }
  45. }
  46.  
  47.  
  48.  
  49. static
  50. areabox( x1, y1, x2, y2, wp )
  51. int    x1,
  52.     y1,
  53.     x2,
  54.     y2;
  55. WindowID    wp;
  56. {
  57.     DrawBuf    buf[1];
  58.     DrawSetLine( buf, x1*DOTSIZEX+EDITOFFX+3, y1*DOTSIZEY+EDITOFFY+3,
  59.         x2*DOTSIZEX+EDITOFFX+3, y2*DOTSIZEY+EDITOFFY+3, 1|OptionXor,
  60.         (x1==x2 || y1==y2) ? OptionLine : OptionBox );
  61.     WindowDraw( wp, buf, 1 );
  62. }
  63.  
  64. areamsg( wp, str )
  65. WindowID    wp;
  66. char    *str;
  67. {
  68.     DrawBuf    buf[1];
  69.     DrawSetSymbol( buf, MSGOFFX, MSGOFFY, str ? str : "              ", AttrDefault, 12 );
  70.     WindowDraw( wp, buf, 1 );
  71. }
  72.  
  73. static
  74. AreaSelectsub( area, wp )
  75. struct Area    *area;
  76. WindowID    wp;
  77. {
  78.     for(;;){
  79.         int    bx,
  80.             by;
  81.         int    x1,
  82.             y1,
  83.             x2,
  84.             y2;
  85.         int    flag;
  86.         mspatset();
  87.         mspat( 1 );
  88.         areamsg( wp, "範囲指定中" );
  89.         for(;;){
  90.             if( WindowGetEventInfo( Ainfo ) && wp == WindowGetChild( WindowRootID, Ainfo ) ){
  91.                 if( Ainfo->LeftON &&    Ainfo->x >EDITOFFX &&
  92.                             Ainfo->x <EDITOFFX+BITSIZEX &&
  93.                             Ainfo->y >EDITOFFY+BUGY &&
  94.                             Ainfo->y <EDITOFFY+BITSIZEY+BUGY ){
  95.                     break;
  96.                 }else if( Ainfo->RightON ){
  97.                     areamsg( wp, 0 );
  98.                     mspat( 0 );
  99.                     return    FALSE;
  100.                 }
  101.             }
  102.         }
  103.  
  104.         bx= x1= (Ainfo->x -EDITOFFX)/DOTSIZEX;
  105.         by= y1= (Ainfo->y -EDITOFFY-BUGY)/DOTSIZEY;
  106.         mspat( 0 );
  107.         flag= FALSE;
  108.         for(;;){
  109.             if( WindowGetEventInfo( Ainfo ) &&
  110.                 wp == WindowGetChild( WindowRootID, Ainfo ) ){
  111.                 if( Ainfo->x >EDITOFFX && Ainfo->x <EDITOFFX+BITSIZEX &&
  112.                     Ainfo->y >EDITOFFY+BUGY && Ainfo->y <EDITOFFY+BITSIZEY+BUGY ){
  113.  
  114.                     x2= (Ainfo->x -EDITOFFX)/DOTSIZEX;
  115.                     y2= (Ainfo->y -EDITOFFY-BUGY)/DOTSIZEY;
  116.                     if( flag==FALSE || bx!= x2 || by!= y2 ){
  117.                         if( flag )
  118.                             areabox( x1, y1, bx, by, wp );
  119.                         areabox( x1, y1, bx=x2, by=y2, wp );
  120.                         flag= TRUE;
  121.                     }
  122.                     if( Ainfo->LeftON && flag ){
  123.                         int    a;
  124.                         area->x1= min( x1, x2 );
  125.                         area->x2= max( x1, x2 );
  126.                         area->y1= min( y1, y2 );
  127.                         area->y2= max( y1, y2 );
  128.                         areamsg( wp, 0 );
  129.                         return    TRUE;
  130.                     }
  131.                 }else{
  132.                     if( flag ){
  133.                         areabox( x1, y1, bx, by, wp );
  134.                         flag= FALSE;
  135.                     }
  136.                 }
  137.             }
  138.             if( Ainfo->RightON ){
  139.                 if( flag )
  140.                     areabox( x1, y1, bx, by, wp );
  141.                 break;
  142.             }
  143.         }
  144.     }
  145. }
  146.  
  147. AreaSelect1( area, wp )
  148. struct Area    *area;
  149. WindowID    wp;
  150. {
  151.     if( AreaSelectsub( area, wp ) ){
  152.         areabox( area->x1, area->y1, area->x2, area->y2, wp );
  153.         return    TRUE;
  154.     }
  155.     return    FALSE;
  156. }
  157.  
  158. AreaSelect2( area, wp, str )
  159. struct Area    *area;
  160. WindowID    wp;
  161. char        *str;    /* 移動先 複写先 */
  162. {
  163.     if( AreaSelectsub( area, wp ) ){
  164.         areamsg( wp, str );
  165.         for( ;; ){
  166.             if( WindowGetEventInfo( Ainfo ) && wp == WindowGetChild( WindowRootID, Ainfo ) ){
  167.                 if( Ainfo->LeftON &&    Ainfo->x >EDITOFFX &&
  168.                             Ainfo->x <EDITOFFX+BITSIZEX &&
  169.                             Ainfo->y >EDITOFFY+BUGY &&
  170.                             Ainfo->y <EDITOFFY+BITSIZEY+BUGY ){
  171.                     break;
  172.                 }else if( Ainfo->RightON ){
  173.                     areamsg( wp, 0 );
  174.                     areabox( area->x1, area->y1, area->x2, area->y2, wp );
  175.                     return    FALSE;
  176.                 }
  177.             }
  178.         }
  179.         area->sx= (Ainfo->x -EDITOFFX)/DOTSIZEX;
  180.         area->sy= (Ainfo->y -EDITOFFY-BUGY)/DOTSIZEY;
  181.         areabox( area->x1, area->y1, area->x2, area->y2, wp );
  182.         areamsg( wp, 0 );
  183.         return    TRUE;
  184.     }
  185.     return    FALSE;
  186. }
  187.  
  188.  
  189.